<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<link href="../style/css/manual-zip.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-zip-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<title>初级URL重写指南 － Apache 2.2 中文手册 [金步国]</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/index.html">模块索引</a> | <a href="../mod/directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p><p class="apache">Apache HTTP Server 版本2.2</p><img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="index.html"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path"><a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">HTTP Server</a> &gt; <a href="https://httpd.apache.org/docs/">文档</a> &gt; <a href="../index.html">版本2.2</a> &gt; <a href="index.html">URL重写</a></div>

<div id="translation-info">　　 <a href="../translator_announcement.html#thanks">致谢</a> | 本篇译者：<a href="../../../index.html">金步国</a>(<a href="../../../index.html">作品集</a>) | 本页最后更新：2006年10月20日</div>
<div id="page-content"><div id="preamble"><h1>初级URL重写指南</h1>



    <p>本文是<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code><a href="../mod/mod_rewrite.html">参考文档</a>的补充材料。阐述在实际应用中如何解决网管所面临的基于URL的典型问题，并详细描述了如何配置URL重写规则集以解决这些问题。</p>

    <div class="warning">注意：根据你的服务器配置，有可能必须对这里的例子作些小修改，比如，在额外启用<code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code>和<code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>的情况下要增加<code>[PT]</code>标志，或者为了适应目录级(<code>.htaccess</code>)的配置而将针对服务器级的规则集进行重写。对一个特定的规则集应该先透彻理解然后再考虑应用，这样才能避免出现问题。</div>

  </div>
	<div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="canonicalurl" id="canonicalurl">规范化URL</a></h2>



<dl>
 <dt>描述：</dt>

   <dd>在有些web服务器上，一个资源会拥有多个URL。在实际应用和发布中应该使用的是规范的URL，其他的则是简写或者只在内部使用。无论用户在请求中使用什么形式的URL，最终看见的都应该是规范的URL。</dd>

   <dt>解决方案：</dt>

     <dd>对所有不规范的URL执行一个外部HTTP重定向，以改变它在浏览器地址栏中的显示及其后继请求。下例中的规则集用规范的<code>/u/user</code>替换<code>/~user</code>，并修正了<code>/u/user</code>所遗漏的后缀斜杠。
<div class="example"><pre>
RewriteRule   ^/<strong>~</strong>([^/]+)/?(.*)    /<strong>u</strong>/$1/$2  [<strong>R</strong>]
RewriteRule   ^/u/(<strong>[^/]+</strong>)$  /$1/$2<strong>/</strong>   [<strong>R</strong>]
</pre></div>
      </dd>
      </dl>

    </div><div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="canonicalhost" id="canonicalhost">规范化主机名</a></h2>

      <dl>
        <dt>描述：</dt>

        <dd>这个规则的目的是强制使用特定的主机名以代替其他名字。比如，你想强制使用<strong>www.example.com</strong>代替<strong>example.com</strong>，就可以在以下方案的基础上进行修改：</dd>

        <dt>解决方案：</dt>

        <dd>
<p>对运行在非80端口的站点</p>
<div class="example"><pre>
RewriteCond %{HTTP_HOST}   !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
</pre></div>

<p>对运行在80端口的站点</p>
<div class="example"><pre>
RewriteCond %{HTTP_HOST}   !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://fully.qualified.domain.name/$1 [L,R]
</pre></div>
        </dd>
      </dl>

    </div><div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="moveddocroot" id="moveddocroot">移动过的<code>DocumentRoot</code></a></h2>



      <dl>
        <dt>描述：</dt>

        <dd>通常，web服务器的<code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>直接对应于URL"<code>/</code>"，但是它常常不是处于最高的一级。比如，你希望访问者在进入网站时首先进入<code>/about/</code>目录。可以使用下面给出的规则集。</dd>

        <dt>解决方案：</dt>

        <dd>只需将"<code>/</code>"重定向到"<code>/about/</code>"即可：
<div class="example"><pre>
RewriteEngine on
RewriteRule   <strong>^/$</strong>  /about/  [<strong>R</strong>]
</pre></div>

    <p>也可以使用<code class="directive"><a href="../mod/mod_alias.html#redirectmatch">RedirectMatch</a></code>指令解决问题：</p>
<div class="example"><p><code>
RedirectMatch ^/$ http://example.com/e/www/
</code></p></div>
</dd>
</dl>

    </div><div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="trailingslash" id="trailingslash">结尾斜杠问题</a></h2>

      <dl>
        <dt>描述：</dt>

    <dd>每个网管对引用目录的结尾斜杠问题都有一本苦经，如果遗漏了，服务器会产生一个错误，因为如果请求是"/~quux/foo"而不是"/~quux/foo/"，服务器就会去找一个叫foo的文件，而它是一个目录，所以就报错了。通常，可以使用这个<a href="https://httpd.apache.org/docs/1.3/misc/FAQ-E.html#set-servername">FAQ entry</a>里面提到的方法解决问题。但是有时候需要使用重写规则来解决问题，比如，在应用了许多复杂的重写规则之后。</dd>

        <dt>解决方案：</dt>

        <dd>解决这个微妙问题的方案是让服务器自动添加后缀斜杠。为了达到目的，必须使用一个外部重定向，以使浏览器能够正确地处理后继的请求(比如对图片的请求)。如果仅仅执行一个内部重写，可能仅仅对目录页面有效，而对含有相对URL的图片的页面无效，因为浏览器有请求内嵌目标的可能。比如，如果不用外部重定向，对<code>/~quux/foo/index.html</code>页面中的<code>image.gif</code>的请求将变成对<code>/~quux/image.gif</code>的请求！所以，应该这样写：

<div class="example"><pre>
RewriteEngine  on
RewriteBase    /~quux/
RewriteRule    ^foo<strong>$</strong>  foo<strong>/</strong>  [<strong>R</strong>]
</pre></div>

   <p>又懒又疯狂的做法是把这些写入其宿主目录中的顶级<code>.htaccess</code>中：</p>

<div class="example"><pre>
RewriteEngine  on
RewriteBase    /~quux/
RewriteCond    %{REQUEST_FILENAME}  <strong>-d</strong>
RewriteRule    ^(.+<strong>[^/]</strong>)$           $1<strong>/</strong>  [R]
</pre></div>
<p>但是这样一来会增加处理上的开销。</p>
        </dd>
      </dl>

    </div><div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="movehomedirs" id="movehomedirs">将用户主目录移动到不同web服务器</a></h2>



      <dl>
        <dt>描述：</dt>

        <dd>通常，许多网管在建立一个新的web服务器时，都会有这样的要求：重定向一个web服务器上的所有用户主目录到另一个web服务器。</dd>

        <dt>解决方案：</dt>

        <dd>很简单，在老的web服务器上重定向所有的"<code>/~user/anypath</code>"到"<code>http://newserver/~user/anypath</code>"：

<div class="example"><pre>
RewriteEngine on
RewriteRule   ^/~(.+)  http://<strong>newserver</strong>/~$1  [R,L]
</pre></div>
        </dd>
      </dl>

    </div><div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="multipledirs" id="multipledirs">在多个目录中搜索页面</a></h2>



      <dl>
        <dt>描述：</dt>

        <dd>有时会有必要使web服务器在多个目录中搜索页面，对此，MultiViews或者其他技术无能为力。</dd>

        <dt>解决方案：</dt>

        <dd>编制一个明确的规则集以搜索目录中的文件：
<div class="example"><pre>
RewriteEngine on

# 首先尝试在 <strong>dir1</strong> 中寻找，找到即停
RewriteCond         /your/docroot/<strong>dir1</strong>/%{REQUEST_FILENAME}  -f
RewriteRule  ^(.+)  /your/docroot/<strong>dir1</strong>/$1  [L]

# 然后尝试在 <strong>dir2</strong> 中寻找，找到即停
RewriteCond         /your/docroot/<strong>dir2</strong>/%{REQUEST_FILENAME}  -f
RewriteRule  ^(.+)  /your/docroot/<strong>dir2</strong>/$1  [L]

# 再找不到就继续寻找其他的 Alias 或 ScriptAlias 目录
RewriteRule   ^(.+)  -  [PT]
</pre></div>
        </dd>
      </dl>

    </div><div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="setenvvars" id="setenvvars">按照URL的片段设置环境变量</a></h2>



      <dl>
        <dt>描述：</dt>

        <dd>希望保持请求之间的状态信息，又不希望使用CGI来包装所有页面，只是通过分离URL中的有用信息来做到。</dd>

        <dt>解决方案：</dt>

        <dd>可以用一个规则集来分离出状态信息，并设置环境变量以备此后用于XSSI或CGI。这样，一个"<code>/foo/S=java/bar/</code>"的URL会被解析为"<code>/foo/bar/</code>"，而环境变量<code>STATUS</code>则被设置为"java"。
<div class="example"><pre>
RewriteEngine on
RewriteRule   ^(.*)/<strong>S=([^/]+)</strong>/(.*)    $1/$3 [E=<strong>STATUS:$2</strong>]
</pre></div>
        </dd>
      </dl>

    </div><div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="uservhosts" id="uservhosts">虚拟用户主机</a></h2>



      <dl>
        <dt>描述：</dt>

        <dd>如果需要为用户username支持一个<code>www.<strong>username</strong>.host.domain.com</code>的主页，但不在此机器上建虚拟主机，而是仅用在此机器上增加一个DNS A记录的方法实现。</dd>

        <dt>解决方案：</dt>

        <dd>仅能对包含"Host: "头的HTTP/1.1请求实现。可以使用以下规则集内部地将<code>http://www.username.host.com/anypath</code>重写为<code>/home/username/anypath</code>
<div class="example"><pre>
RewriteEngine on
RewriteCond   %{<strong>HTTP_HOST</strong>}                 ^www\.<strong>[^.]+</strong>\.host\.com$
RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
RewriteRule   ^www\.<strong>([^.]+)</strong>\.host\.com(.*) /home/<strong>$1</strong>$2
</pre></div>
        </dd>
      </dl>

    </div><div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="redirecthome" id="redirecthome">为外来访问者重定向用户主目录</a></h2>



      <dl>
        <dt>描述：</dt>

        <dd>对不是来自本地域<code>ourdomain.com</code>的外来访问者的请求，重定向其用户主目录URL到另一个web服务器<code>www.somewhere.com</code>，有时这种做法也会用在虚拟主机的配置段中。</dd>

        <dt>解决方案：</dt>

        <dd>只须一个重写条件：
<div class="example"><pre>
RewriteEngine on
RewriteCond   %{REMOTE_HOST}  <strong>!^.+\.ourdomain\.com$</strong>
RewriteRule   ^(/~.+)         http://www.somewhere.com/$1 [R,L]
</pre></div>
        </dd>
      </dl>

    </div><div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="redirectanchors" id="redirectanchors">重定向锚</a></h2>



      <dl>
        <dt>描述：</dt>

        <dd>默认情况下，重定向到一个HTML锚是不可行的，因为'<code>#</code>'会被转义为'<code>%23</code>'。这会导致重定向到另外一个非你所愿的地址。</dd>

        <dt>解决方案：</dt>

        <dd>在<code>RewriteRule</code>指令中使用<code>[NE]</code>标志(不转义)。</dd>
      </dl>

    </div><div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2>依赖于时间的重写</h2>



      <dl>
        <dt>描述：</dt>

        <dd>在页面内容需要按时间的不同而变化的场合，比如重定向特定页面等，许多网管仍然采用CGI脚本的方法，如何用<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>来实现呢？</dd>

        <dt>解决方案：</dt>

        <dd>有许多名为<code>TIME_xxx</code>的变量可以用在重写条件中，联合使用词典模式的"<code>&lt;STRING</code>", "<code>=STRING</code>", "<code>&gt;STRING</code>"比较，就可以实现依赖于时间的重写：</p>

<div class="example"><pre>
RewriteEngine on
RewriteCond   %{TIME_HOUR}%{TIME_MIN} &gt;0700
RewriteCond   %{TIME_HOUR}%{TIME_MIN} &lt;1900
RewriteRule   ^foo\.html$             foo.day.html
RewriteRule   ^foo\.html$             foo.night.html
</pre></div>

          <p>此例使<code>foo.html</code>在<code>07:00-19:00</code>时间内指向<code>foo.day.html</code>，而在其余时间指向<code>foo.night.html</code>，对主页是一个不错的功能...</p>
        </dd>
      </dl>

    </div><div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2>对YYYY转变为XXXX的向前兼容</h2>



      <dl>
        <dt>描述：</dt>

        <dd>在转变了大批<code>document.YYYY</code>文件为<code>document.XXXX</code>后(比如<code>.html</code>→<code>.phtml</code>)，如何保持URL的向前兼容(仍然虚拟地存在)？</dd>

        <dt>解决方案：</dt>

        <dd>只须按基准文件名重写，并测试带有新的扩展名的文件是否存在，如果存在则用新的，否则仍然用原来的。</p>


<div class="example"><pre>
# 将document.html重写为document.phtml的向后兼容的规则集
# 当且仅当document.phtml存在且document.html不存在的时候
RewriteEngine on
RewriteBase   /~quux/
# 剪切并记住basename
RewriteRule   ^(.*)\.html$              $1      [C,E=WasHTML:yes]
# 如果存在的话就重写为document.phtml
RewriteCond   %{REQUEST_FILENAME}.phtml -f
RewriteRule   ^(.*)$ $1.phtml                   [S=1]
# 否则返回先前的basename
RewriteCond   %{ENV:WasHTML}            ^yes$
RewriteRule   ^(.*)$ $1.html
</pre></div>
        </dd>
      </dl>

    </div><div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="content" id="content">内容处理</a></h2>



    <h3>从旧到新(内部)</h3>

      <dl>
        <dt>描述：</dt>

        <dd>假定已经把文件<code>foo.html</code>改名为<code>bar.html</code>，需要对老的URL向后兼容，即让用户仍然可以使用老的URL，而感觉不到文件被改名了。</dd>

        <dt>解决方案：</dt>

        <dd>通过以下规则内部地将老的URL重写为新的：
<div class="example"><pre>
RewriteEngine  on
RewriteBase    /~quux/
RewriteRule    ^<strong>foo</strong>\.html$  <strong>bar</strong>.html
</pre></div>
        </dd>
      </dl>



    <h3>从旧到新(外部)</h3>

      <dl>
        <dt>描述：</dt>

        <dd>仍然假定已经把文件<code>foo.html</code>改名为<code>bar.html</code>，需要对老的URL向后兼容，但是要让用户得到文件被改名的暗示，即浏览器的地址栏中显示的是新的URL。</dd>

        <dt>解决方案：</dt>

        <dd>作一个HTTP的强制重定向以改变浏览器和用户界面上的显示：
<div class="example"><pre>
RewriteEngine  on
RewriteBase    /~quux/
RewriteRule    ^<strong>foo</strong>\.html$  <strong>bar</strong>.html  [<strong>R</strong>]
</pre></div>
        </dd>
      </dl>



    <h3>从静态到动态</h3>

      <dl>
        <dt>描述：</dt>

        <dd>如何无缝转换静态页面<code>foo.html</code>为动态的<code>foo.cgi</code>，而不为浏览器/用户所察觉。</dd>

        <dt>解决方案：</dt>

        <dd>只须重写此URL为CGI-script，并强制作为CGI-script运行的MIME类型。比如对<code>/~quux/foo.html</code>的请求会执行<code>/~quux/foo.cgi</code> 。

<div class="example"><pre>
RewriteEngine  on
RewriteBase    /~quux/
RewriteRule    ^foo\.<strong>html</strong>$  foo.<strong>cgi</strong>  [T=<strong>application/x-httpd-cgi</strong>]
</pre></div>
        </dd>
      </dl>


</div><div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="access" id="access">访问控制</a></h2>



    <h3>阻止Robot</h3>



      <dl>
        <dt>描述：</dt>

        <dd>如何阻止一个完全匿名的Robot取得特定网络区域的页面？<code>/robots.txt</code>文件可以包含若干"Robot排除协议"行，但不足以阻止此类Robot。</dd>

        <dt>解决方案：</dt>

        <dd>可以用一个规则集以拒绝对网络区域<code>/~quux/foo/arc/</code>(对一个很深的目录区域进行列表可能会使服务器产生很大的负载)的访问。还必须确保仅阻止特定的Robot，也就是说，仅仅阻止Robot访问主机是不够的(这样会同时阻止用户访问该主机)。为此，就需要对HTTP头的User-Agent信息作匹配。

<div class="example"><pre>
RewriteCond %{HTTP_USER_AGENT}   ^<strong>NameOfBadRobot</strong>.*
RewriteCond %{REMOTE_ADDR}       ^<strong>123\.45\.67\.[8-9]</strong>$
RewriteRule ^<strong>/~quux/foo/arc/</strong>.+   -   [<strong>F</strong>]
</pre></div>
        </dd>
      </dl>



    <h3>阻止内嵌的图片</h3>



      <dl>
        <dt>描述：</dt>

        <dd>假设<code>http://www.quux-corp.de/~quux/</code>有一些内嵌GIF图片的页面，这些图片很好，所以就有人盗链到他们自己的页面中了。由于这样徒然增加了我们服务器的流量，因此，我们不愿意这种事情发生。</dd>

        <dt>解决方案：</dt>

        <dd>虽然，我们不能100%地保护这些图片不被写入别人的页面，但至少可以对发出HTTP Referer头的浏览器加以限制。

<div class="example"><pre>
RewriteCond %{HTTP_REFERER} <strong>!^$</strong>
RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$ [NC]
RewriteRule <strong>.*\.gif$</strong>        -                                    [F]
</pre></div>

<div class="example"><pre>
RewriteCond %{HTTP_REFERER}         !^$
RewriteCond %{HTTP_REFERER}         !.*/foo-with-gif\.html$
RewriteRule <strong>^inlined-in-foo\.gif$</strong>   -                        [F]
</pre></div>
        </dd>
      </dl>



    <h3>拒绝代理</h3>



      <dl>
        <dt>描述：</dt>

        <dd>如何拒绝某个主机或者来自特定主机的用户使用Apache代理？</dd>

        <dt>解决方案：</dt>

        <dd>首先，要确保在配置文件中<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>位于<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>之后！使它在<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code><em>之前</em>被调用。然后，使用如下方法拒绝某个主机：
<div class="example"><pre>
RewriteCond %{REMOTE_HOST} <strong>^badhost\.mydomain\.com$</strong>
RewriteRule !^http://[^/.]\.mydomain.com.*  - [F]
</pre></div>

          <p>使用如下方法拒绝user@host-dependent用户：</p>

<div class="example"><pre>
RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST}  <strong>^badguy@badhost\.mydomain\.com$</strong>
RewriteRule !^http://[^/.]\.mydomain.com.*  - [F]
</pre></div>
        </dd>
      </dl>



  </div><div class="top"><a href="rewrite_guide.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="other" id="other">其它</a></h2>



    <h3>外部重写引擎</h3>



      <dl>
        <dt>描述：</dt>

        <dd>如何解决似乎无法用<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>解决的FOO/BAR/QUUX/之类的问题？</dd>

        <dt>解决方案：</dt>

        <dd>可以使用一个与<code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>功能相同的外部<code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>程序，一旦它在Apache启动时被执行，则从<code>STDIN</code>接收被请求的URL ，并将处理过(通常是重写过的)的URL(以相同顺序)在<code>STDOUT</code>输出。
<div class="example"><pre>
RewriteEngine on
RewriteMap    quux-map       <strong>prg:</strong>/path/to/map.quux.pl
RewriteRule   ^/~quux/(.*)$  /~quux/<strong>${quux-map:$1}</strong>
</pre></div>

<div class="example"><pre>
#!/path/to/perl

# 禁止使用会导致Apache陷入死循环的I/O缓冲
$| = 1;

# 从stdin读取URL(每行一个)，并在stdout输出替换URL
while (&lt;&gt;) {
    s|^foo/|bar/|;
    print $_;
}
</pre></div>
这是只是一个简单的示例，只是把所有的<code>/~quux/foo/...</code>重写为<code>/~quux/bar/...</code>而已。但事实上，可以把它修改成任何你想要的输出。但是要注意，虽然一般用户都可以<strong>使用</strong>，可是只有系统管理员才可以<strong>定义</strong>这样的映射。</dd>
      </dl>



  </div></div>
<div id="footer">
<p class="apache">本文允许自由的转载、引用、再分发，但必须保留译者署名并注明出处；详见：<a href="../translator_announcement.html#announcement">版权声明</a>。</p>
<p class="menu"><a href="../mod/index.html">模块索引</a> | <a href="../mod/directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p></div>
</body></html>
